home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / obero / OberonAModules.lha / OS2.Mod < prev    next >
Text File  |  1999-02-26  |  6KB  |  270 lines

  1. (*
  2. OS2.Mod for Oberon-A:
  3. This module makes it much easier to make fontsensitive GUI's with GadTools
  4. in Oberon-A.
  5. This module was originally a Unit for Pascal done by Björn Schotte.
  6.  
  7. OS2.Mod was converted by:
  8.   Morten Bjergstrøm
  9.   EMail: mbjergstroem@hotmail.com
  10. *)
  11.  
  12.  
  13.  
  14. <*STANDARD-*>
  15. MODULE OS2;
  16.  
  17. IMPORT
  18.   d:=Dos,
  19.   e:=Exec,
  20.   g:=Graphics,
  21.   gt:=GadTools,
  22.   i:=Intuition,
  23.   ie:=InputEvent,
  24.   u:=Utility,
  25.   Sets,
  26.   SYS:=SYSTEM;
  27.  
  28.  
  29. VAR
  30.   topaz80 : g.TextAttr;
  31.   MyTattr* : g.TextAttrPtr;
  32.   WBRight*,WBBottom*,ScreenW*,ScreenH*,FontX*,FontY*,XOff*,YOff* : INTEGER;
  33.  
  34.  
  35.  
  36. PROCEDURE ComputeX*(value:INTEGER):INTEGER;
  37.  
  38. BEGIN
  39.   RETURN (((FontX*value)+4) DIV 8);
  40. END ComputeX;
  41.  
  42. PROCEDURE ComputeY*(value:INTEGER):INTEGER;
  43.  
  44. BEGIN
  45.   RETURN (((FontY*value)+4) DIV 8);
  46. END ComputeY;
  47.  
  48. PROCEDURE ComputeTopazX*(value:INTEGER):INTEGER;
  49.  
  50. BEGIN
  51.   RETURN (8*value-4) DIV FontX+1;
  52. END ComputeTopazX;
  53.  
  54. PROCEDURE ComputeTopazY*(value:INTEGER):INTEGER;
  55.  
  56. BEGIN
  57.   RETURN (8*value-4) DIV FontY+1;
  58. END ComputeTopazY;
  59.  
  60. PROCEDURE ComputeFont*(VAR f:g.TextFontPtr; width,height:INTEGER);
  61.  
  62.   PROCEDURE UseTopaz();
  63.  
  64.   BEGIN
  65.     MyTattr.name:=SYS.ADR("topaz.font");
  66.     FontX:=8;
  67.     FontY:=8;
  68.     MyTattr.flags:={g.romFont};
  69.     MyTattr.ySize:=8;
  70.   END UseTopaz;
  71.  
  72.  
  73. BEGIN
  74.   e.Forbid;
  75.   MyTattr:=SYS.ADR(topaz80);
  76.   MyTattr.name:=f.message.node.name;
  77.   MyTattr.ySize:=f.ySize;
  78.   FontY:=f.ySize;
  79.   FontX:=f.xSize;
  80.   e.Permit;
  81.   IF (width>0) & (height>0) THEN
  82.     IF ((ComputeX(width)+XOff+WBRight)>ScreenW) THEN UseTopaz() END;
  83.     IF ((ComputeY(height)+YOff+WBBottom)>ScreenH) THEN UseTopaz() END;
  84.   END;
  85. END ComputeFont;
  86.  
  87. PROCEDURE SensitivGadget*(VAR ng:gt.NewGadget);
  88.  
  89. BEGIN
  90.   ng.leftEdge:=ComputeX(ng.leftEdge)+XOff;
  91.   ng.topEdge:=ComputeY(ng.topEdge)+YOff;
  92.   ng.width:=ComputeX(ng.width);
  93.   ng.height:=ComputeY(ng.height);
  94. END SensitivGadget;
  95.  
  96. PROCEDURE FS_BevelBox*(VAR wo:i.WindowPtr; VAR vi:gt.VisualInfo; x,y,b,h:INTEGER; recessed:BOOLEAN);
  97.  
  98. BEGIN
  99.   gt.DrawBevelBox(wo.rPort,
  100.                    XOff+ComputeX(x),
  101.                    YOff+ComputeY(y),
  102.                    ComputeX(b),
  103.                    ComputeY(h),
  104.                    gt.visualInfo,vi,
  105.                    gt.bbRecessed,recessed,
  106.                    u.done);
  107. END FS_BevelBox;
  108.  
  109. PROCEDURE GadSelect*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr);
  110.  
  111. VAR
  112.   next:i.GadgetPtr;
  113.   old:Sets.SET32;
  114.   dummy:BOOLEAN;
  115.   class:Sets.SET32;
  116.   code:INTEGER;
  117.   msg:i.IntuiMessagePtr;
  118.  
  119. BEGIN
  120.   old:=wp.idcmpFlags;
  121.   dummy:=i.ModifyIDCMP(wp,{i.rawKey});
  122.   next:=gad.nextGadget;
  123.   gad.nextGadget:=NIL;
  124.   gad.flags:=gad.flags+{i.selected};
  125.   i.RefreshGadgets(gad,wp,NIL);
  126.   REPEAT
  127.     e.WaitPort(wp.userPort);
  128.     msg:=gt.GetIMsg(wp.userPort);
  129.     class:=msg.class;
  130.     code:=msg.code;
  131.     gt.ReplyIMsg(msg);
  132.   UNTIL (i.rawKey IN class) & (code=ie.upPrefix); (*Skal laves om*)
  133.   dummy:=i.ModifyIDCMP(wp,old);
  134.   gad.flags:=gad.flags-{i.selected};
  135.   i.RefreshGadgets(gad,wp,NIL);
  136.   gad.nextGadget:=next;
  137. END GadSelect;
  138.  
  139. PROCEDURE SetCheckBox*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr; req:i.RequesterPtr; flag:BOOLEAN);
  140.  
  141. BEGIN
  142.   gt.SetGadgetAttrs(gad^,wp,req,
  143.                      gt.cbChecked,flag,
  144.                      u.done);
  145. END SetCheckBox;
  146.  
  147. PROCEDURE SetMXGad*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr; req:i.RequesterPtr; active:INTEGER);
  148.  
  149. BEGIN
  150.   gt.SetGadgetAttrs(gad^,wp,req,
  151.                     gt.mxActive,active,
  152.                     u.done);
  153. END SetMXGad;
  154.  
  155. PROCEDURE SetCycleGad*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr; req:i.RequesterPtr; active:INTEGER);
  156.  
  157. BEGIN
  158.   gt.SetGadgetAttrs(gad^,wp,req,
  159.                     gt.cyActive,active,
  160.                     u.done);
  161. END SetCycleGad;
  162.  
  163. PROCEDURE SetListViewGad*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr; req:i.RequesterPtr; active,top:INTEGER);
  164.  
  165. BEGIN
  166.   gt.SetGadgetAttrs(gad^,wp,req,
  167.                     gt.lvSelected,active,
  168.                     gt.lvTop,top,
  169.                     u.done);
  170. END SetListViewGad;
  171.  
  172. PROCEDURE SetListViewList*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr; req:i.RequesterPtr; VAR NeueList:e.ListPtr);
  173.  
  174. BEGIN
  175.   gt.SetGadgetAttrs(gad^,wp,req,
  176.                     gt.lvLabels,NeueList,
  177.                     u.done);
  178. END SetListViewList;
  179.  
  180. PROCEDURE SetNumberGad*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr; req:i.RequesterPtr; nummer:INTEGER);
  181.  
  182. BEGIN
  183.   gt.SetGadgetAttrs(gad^,wp,req,
  184.                     gt.nmNumber,nummer,
  185.                     u.done);
  186. END SetNumberGad;
  187.  
  188.  
  189. PROCEDURE GhostGadget*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr; req:i.RequesterPtr; dis:BOOLEAN);
  190.  
  191. BEGIN
  192.   gt.SetGadgetAttrs(gad^,wp,req,
  193.                     i.gaDisabled,dis,
  194.                     u.done);
  195. END GhostGadget;
  196.  
  197. PROCEDURE ActStringGad*(VAR wp:i.WindowPtr; VAR gad:i.GadgetPtr; req:i.RequesterPtr);
  198.  
  199. VAR
  200.   dummy:BOOLEAN;
  201.  
  202. BEGIN
  203.   dummy:=i.ActivateGadget(gad^,wp,req);
  204. END ActStringGad;
  205.  
  206. PROCEDURE DrawBevelLine*(MyRp:g.RastPortPtr; VAR vi:gt.VisualInfo; x,y,b:INTEGER; recessed:BOOLEAN);
  207.  
  208. BEGIN
  209.   gt.DrawBevelBox(MyRp,XOff+ComputeX(x),YOff+ComputeY(y),ComputeX(b),2,
  210.                   gt.visualInfo,vi,
  211.                   gt.bbRecessed,recessed,
  212.                   u.done);
  213. END DrawBevelLine;
  214.  
  215. PROCEDURE MakeGadget*(VAR NytGadget:gt.NewGadget; LeftEdge,TopEdge,Width,Height:INTEGER; Text:ARRAY OF CHAR; TextAttr:g.TextAttrPtr; ID: INTEGER; Flags:Sets.SET32; VisualInfo:gt.VisualInfo; UserData:e.APTR);
  216.  
  217. BEGIN
  218.  
  219.   NytGadget.leftEdge:=LeftEdge;
  220.   NytGadget.topEdge:=TopEdge;
  221.   NytGadget.width:=Width;
  222.   NytGadget.height:=Height;
  223.   NytGadget.gadgetText:=SYS.ADR(Text);
  224.   NytGadget.textAttr:=TextAttr;
  225.   NytGadget.gadgetID:=ID;
  226.   NytGadget.flags:=Flags;
  227.   NytGadget.visualInfo:=VisualInfo;
  228.   NytGadget.userData:=UserData;
  229.  
  230. END MakeGadget;
  231.  
  232. PROCEDURE InitOS2*(Screen:i.ScreenPtr; VAR ScreenFont:g.TextFontPtr; VAR VisualInfo:gt.VisualInfo):BOOLEAN;
  233.  
  234. VAR
  235.   DrawInfo:i.DrawInfoPtr;
  236.  
  237. BEGIN
  238.  
  239.   IF Screen=NIL THEN RETURN FALSE END;
  240.  
  241.   ScreenW:=Screen.width;
  242.   ScreenH:=Screen.height;
  243.   WBRight:=Screen.wBorRight;
  244.   WBBottom:=Screen.wBorBottom;
  245.  
  246.   DrawInfo:=i.GetScreenDrawInfo(Screen);
  247.   IF DrawInfo=NIL THEN RETURN FALSE END;
  248.  
  249.   ScreenFont:=DrawInfo.font;
  250.   XOff:=Screen.wBorLeft;
  251.   YOff:=Screen.wBorTop+ScreenFont.ySize+1;
  252.   i.FreeScreenDrawInfo(Screen,DrawInfo);
  253.  
  254.   VisualInfo:=gt.GetVisualInfo(Screen,NIL);
  255.  
  256.   IF VisualInfo=NIL THEN RETURN FALSE END;
  257.  
  258.   ComputeFont(ScreenFont,0,0);
  259.  
  260.   RETURN TRUE;
  261.  
  262. END InitOS2;
  263.  
  264. BEGIN
  265.   topaz80.name:=SYS.ADR("topaz.font");
  266.   topaz80.ySize:=8;
  267.   topaz80.style:={};
  268.   topaz80.flags:={};
  269. END OS2.
  270.